/**
 * Created by Arley on 2016/12/01.
 */

//'use strict';
const VERSION = '2.1.0';
var contextPath = '';
var LOCALURL = window.location;

/**
 * 扩展Date()方法的格式化
 * @author Arley   07|04|2017
 *
 * @param fmt {string} :  "yyyy/MM/dd qq hh/mm/ss" 注：该规则字符串可随意删减部分传入。
 * @returns {*}
 */
Date.prototype.format = function(fmt) {
    var o = {
        "M+" : this.getMonth()+1,                 //月份
        "d+" : this.getDate(),                    //日
        "h+" : this.getHours(),                   //小时
        "m+" : this.getMinutes(),                 //分
        "s+" : this.getSeconds(),                 //秒
        "q+" : Math.floor((this.getMonth()+3)/3), //季度
        "S"  : this.getMilliseconds()             //毫秒
    };
    if(/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
    }
    for(var k in o) {
        if(new RegExp("("+ k +")").test(fmt)){
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
        }
    }
    return fmt;
};
/**
 * 扩展数组的删除方法
 * @param val
 * @returns {number}
 */
Array.prototype.indexOf = function(val) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == val) return i;
    }
    return -1;
};
Array.prototype.remove = function(val) {
    var index = this.indexOf(val);
    if (index > -1) {
        this.splice(index, 1);
    }
};
// ----------------------------------------------------------------------
// <summary>
// 限制只能输入数字
// </summary>
// ----------------------------------------------------------------------
$.fn.onlyNum = function () {
    $(this).keypress(function (event) {
        var eventObj = event || e;
        var keyCode = eventObj.keyCode || eventObj.which;
        if ((keyCode >= 48 && keyCode <= 57))
            return true;
        else
            return false;
    }).focus(function () {
        //禁用输入法
        this.style.imeMode = 'disabled';
    }).bind("paste", function () {
        //获取剪切板的内容
        var clipboard = window.clipboardData.getData("Text");
        if (/^\d+$/.test(clipboard))
            return true;
        else
            return false;
    });
};
// ----------------------------------------------------------------------
// <summary>
// 限制只能输入字母
// </summary>
// ----------------------------------------------------------------------
$.fn.onlyAlpha = function () {
    $(this).keypress(function (event) {
        var eventObj = event || e;
        var keyCode = eventObj.keyCode || eventObj.which;
        if ((keyCode >= 65 && keyCode <= 90) || (keyCode >= 97 && keyCode <= 122))
            return true;
        else
            return false;
    }).focus(function () {
        this.style.imeMode = 'disabled';
    }).bind("paste", function () {
        var clipboard = window.clipboardData.getData("Text");
        if (/^[a-zA-Z]+$/.test(clipboard))
            return true;
        else
            return false;
    });
};
// ----------------------------------------------------------------------
// <summary>
// 限制只能输入数字和字母
// </summary>
// ----------------------------------------------------------------------
$.fn.onlyNumAlpha = function () {
    $(this).keypress(function (event) {
        var eventObj = event || e;
        var keyCode = eventObj.keyCode || eventObj.which;
        if ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 65 && keyCode <= 90) || (keyCode >= 97 && keyCode <= 122))
            return true;
        else
            return false;
    }).focus(function () {
        this.style.imeMode = 'disabled';
    }).bind("paste", function () {
        var clipboard = window.clipboardData.getData("Text");
        if (/^(\d|[a-zA-Z])+$/.test(clipboard))
            return true;
        else
            return false;
    });
};

/**
 * 判断当前窗口是否为USER屏幕最前端视口
 * @author Arley   01|12|2016
 *
 * 该方法必须声明全局变量：WINDOWFOCUS
 * 依赖于jQuery。
 *
 */
var WINDOWFOCUS = true; //该全局变量用于保存当前页面是否在屏幕最前端（即：未最小化或是未切换任务栏）
function windowInFocus () {
    $(window).on("focus", function () {
        WINDOWFOCUS = true;
    });
    $(window).on("blur", function () {
        WINDOWFOCUS = false;
    });
    return true;
}

/**
 *  按钮禁用方法(IE下适用IE8以上)
 *  注意：该方法与 rebind 方法共同使用，切传入事件句柄必须相同
 *
 *  @author Arley   01|12|2016
 *
 *  @param selector         ：   目标元素选择器          string类型       必选项
 *  @Param type             ：   解除绑定事件类型        string类型       必选项
 *  @param eventHandler     ：   目标元素事件句柄                         必选项
 *  @param callback         ：   禁用后需要执行的逻辑                     可选项
 */
function disabled(selector, event, eventHandler, callback) {
    if (typeof selector != 'string') {
        return;
    }
    if (typeof event != 'string') {
        return;
    }
    if (typeof eventHandler != 'function' || Boolean(eventHandler) == false) {
        return;
    }
    if (!!callback) {
        if (typeof callback != 'function') {
            return;
        }
    }
    var d = document.querySelectorAll(selector).item(0);
    if (d.removeEventListener) {
        d.removeEventListener(event, eventHandler, false);
    } else if (d.detachEvent) {   //兼容IE8及其他浏览器
        d.detachEvent('on' + event, eventHandler);
    } else {
        alert("该浏览器暂不支持这种方法，请选择其他方法")
    }
    callback && callback();
    return true;
}
/**
 *  按钮恢复绑定事件方法(IE下适用IE8以上)
 *  注意：该方法与 disabled 方法共同使用，切传入事件句柄必须相同
 *
 *  @author Arley   01|12|2016
 *
 *  @param selector         ： 目标元素选择器             string类型   必选项
 *  @Param type             :  解除绑定事件类型           string类型   必选项
 *  @param eventHandler     ： 目标元素事件句柄                        必选项
 *  @param callback         ： 重新绑定后需要执行的逻辑                 可选项
 */

function rebind (selector, event, eventHandler, callback) {
    if (typeof selector != 'string') {
        return;
    }
    if (typeof event != 'string') {
        return;
    }
    if (typeof eventHandler != 'function' || Boolean(eventHandler) == false) {
        return;
    }
    if (!!callback) {
        if (typeof callback != 'function') {
            return;
        }
    }
    var d = document.querySelectorAll(selector).item(0);
    if (d.addEventListener) {
        d.addEventListener(event, eventHandler, false);
    } else if (d.attachEvent) {  //兼容IE8及其他浏览器
        d.attachEvent('on' + event, eventHandler);
    } else {
        alert("该浏览器暂不支持这种方法，请选择其他方法");
    }
    callback && callback();
    return true;
}

/**
 *  分页功能
 *  @author Arley   04|12|2016
 *
 *  @param page     ：   当前页面索引值
 *  @param pageSize ：   每页显示列表数
 *  @param totalNum ：   列表总个数
 *
 */
function paging (page, pageSize, totalNum) {
    page = page || 1;
    pageSize = pageSize || 10;
    var totalPage = Math.ceil(totalNum / pageSize); // 总页数
    if (totalPage < 2) {return "";}
    page = Math.min(totalPage, page);
    var showNum = 5;	// 显示多少个页 * 2

    var start = Math.max(1, page - showNum);
    var end = Math.min(totalPage, page + showNum);

    // 不足 $showNum，补全左右两侧
    var right = page + showNum - totalPage;
    if(right > 0) start = Math.max(1, start -= right);
    var left = page - showNum;
    if(left < 0) end = Math.min(totalPage, end -= left);

    var s = '';
    s += '<a href="javascript:;" class="prev-page">上一页</a>';
    if(start > 1) s += '<a href="javascript:void(0)" data-index="1">1 '+(start > 2 ? '... ' : '')+'</a>';
    for(var i=start; i<=end; i++) {
        if(i == page) {
            s += '<a href="javascript:void(0)" data-index="' + i + '" class="page-active">'+i+'</a>';   // active
        } else {
            s += '<a href="javascript:void(0)" data-index="' + i + '">'+i+'</a>';
        }
    }
    if(end != totalPage) s += '<a href="javascript:void(0)" data-index="' + totalPage + '">'+(totalPage - end > 1 ? '... ' : '')+totalPage+'</a>';
    if(page != totalPage) s += '<a href="javascript:;" class="next-page">下一页</a>';
    return s;
}

//重定义Ajax调用
function redefineAjax (option) {
    var options = $.extend({}, option);
    //调用jQuery的ajax逻辑
    $.ajax({
        type : options.type || 'post',   //请求类型
        url : options.url || '',        //请求地址
        data : options.data || {},      //请求的参数
        dataType : options.dataType || 'json',     //返回值类型
        async : options.async || true,      //TRUE: 异步；FALSE：同步，默认值
        processData : options.processData || true,      //序列化参数为String类型，默认：true。
        //contentType : options.contentType || true,      //内容编码，文件上传时设为FALSE
        timeout : options.timeout || 2000,         //时间
        //jsonpCallback : options.jsonpCallback || '',        //jsonp时设置的callback函数名
        beforeSend : function (XMLHttpRequest) {       //请求发送前的事件逻辑
            if (!!options.beforeSend) {
                options.beforeSend();
            }
        },
        success : function (res) {      //请求成功
            try {
                if (res) {
                    var data = JSON.parse(res);
                    options.success(data);
                } else {
                    console.log(JSON.stringify(res));
                    throw new Error('The redefineAjax method has an unknown error, and the return value is printed on top, check the return value.');
                }
            } catch (e) {
                // console.log(e.message);
                if (res) {
                    options.success(res);
                } else {
                    console.log(JSON.stringify(res));
                }
            }
        },
        error : function (XMLHttpRequest, textStatus, errorThrown) {        //请求失败
            if (!!options.error) {
                options.error();
            } else {
                console.log(textStatus);
            }
        },
        complete : function (XMLHttpRequest, textStatus) {      //请求完成
            if (!!options.complete) {
                options.complete();
            } else {
                return false;
            }
        }
    });
}


/**
 * 自定义jQuery的Ajax请求方法
 *  参数必选项：type,url,data,successHandler，其余为可选项。
 *
 *  @author Arley   06|12|2016
 *
 *  @param type     ：   请求类型，默认为“ POST ”
 *  @param url      ：   请求接口地址
 *  @param successHandler   ：   请求成功后的回调函数
 *  @param errorHandler     ：   请求失败后的回调函数
 *  @param beforeHandler    ：   请求发送前的执行函数
 *  @param conmleteHandler  ：   请求完成后的执行函数
 *  @param async    ：   异步或同步，默认为异步（true）
 *
 */

function $ajax (type, url, data, successHandler, errorHandler, beforeHandler, completeHandler, async) {
    if (!!type) {
        if (typeof type != 'string') {
            throw new Error("The parameter of 'type''s type must be a string.");
            return;
        }
    } else {
        throw new Error("The parameter of 'type' is not defined.");
    }

    if (!!url) {
        if (typeof url != 'string') {
            throw new Error("The parameter of 'url''s type must be a string.");
            return;
        }
    } else {
        throw new Error("The parameter of 'url' is not defined.");
    }

    var _data;
    if (typeof data == 'string') {
        var reg = /[-_=]/ig;
        if (reg.test(data)) {
            _data = data;
        } else {
            throw new Error("The parameter 'data' format is wrong.");
        }
    } else if (typeof data == 'object') {
        _data = data;
    } else {
        return  new Error('Parameter data is wrong');
    }

    if (!!successHandler && typeof successHandler != 'function') {
        return;
    }

    if (!!errorHandler && typeof errorHandler != 'function') {
        return;
    }

    if (!!beforeHandler && typeof beforeHandler != 'function') {
        return;
    }

    if (!!completeHandler && typeof completeHandler != 'function') {
        return;
    }

    if (!!async && async != false && async != true) {
        return;
    }

    $.ajax({
        type : type || 'post',
        url : url,
        data : _data,
        dataType : 'json',            //php接口GET方法时不对。
        async : async || true,
        timeout : 2000,
        contentType : 'application/x-www-form-urlencoded; charset=UTF-8',
        beforeSend : beforeHandler,
        success : function (res) {
            try {
                if (res) {
                    var data = eval("("+ res +")");
                    successHandler(data);
                } else {
                    console.log(JSON.stringify(res));
                }
            } catch (e) {
                console.log(e.message);
                if (res) {
                    successHandler(res);
                } else {
                    console.log(JSON.stringify(res));
                }
            }
        },
        error : function (XMLHttpRequest, textStatus, errorThrown) {
            errorHandler();
        },
        complete : completeHandler
    });
    return true;
}


/**
 * 对原生Ajax书写进行封装
 * @author Arley   12|12|2016
 * @param options   ： 参数集合
 * 调用方式
 * xhrAjax({
 *       url: "string",                         //请求地址
 *       type: "POST",                          //请求方式 默认为POST
 *       data: { name: "super", age: 20 },      //请求参数
 *       dataType: "json",
 *       success: function (response, xml) {
 *           // 此处放成功后执行的代码
 *       },
 *       error: function (status) {
 *           // 此处放失败后执行的代码
 *       }
 *   });
 */

function xhrAjax(options) {
    options = options || {};
    options.type = (options.type || "POST").toUpperCase();
    options.dataType = options.dataType || "json";
    var params = formatParams(options.data);

    //首先检测xmlHttpRequest对象
    var xmlHttpRequest;
    if (window.XMLHttpRequest) {
        //针对FireFox，Mozilla，Opera，Safari，IE7，IE8
        xmlHttpRequest = new XMLHttpRequest();
        //针对某些特定版本的Mozilla浏览器的BUG进行修正
        if (xmlHttpRequest.overrideMimeType) {
            xmlHttpRequest.overrideMimeType("text/xml");
        }
    } else if (window.ActiveXObject) {
        //针对IE6，IE5.5，IE5
        //两个可以用于创建XMLHTTPRequest对象的控件名称，保存在一个js的数组中
        //排在前面的版本较新
        var activeXName = [ "MSXML2.XMLHTTP", "Microsoft.XMLHTTP" ];
        for ( var i = 0; i < activeXName.length; i++) {
            try {
                //取出一个控件名进行创建，如果创建成功就终止循环
                //如果创建失败，回抛出异常，然后可以继续循环，继续尝试创建
                xmlHttpRequest = new ActiveXObject(activeXName[i]);
                if(xmlHttpRequest){
                    break;
                }
            } catch (e) {
                console.log(e.message);
            }
        }
    }

    if (options.type == "GET") {
        xmlHttpRequest.open("GET", options.url + "?" + params, true);
        xmlHttpRequest.send(null);
    } else if (options.type == "POST") {
        xmlHttpRequest.open("POST", options.url, true);
        //设置表单提交时的内容类型
        xmlHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
        xmlHttpRequest.send(params);
    }
    xmlHttpRequest.onreadystatechange = function(){
        if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200){
            options.success && options.success(xhr.responseText, xhr.responseXML);
        } else {
            options.error && options.error(xmlHttpRequest.status);
        }
    }

    //格式化数据
    var formatParams = function (data) {
        var arr = [];
        for (var name in data) {
            arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[name]));
        }
        arr.push(("v=" + Math.random()).replace(".",""));
        return arr.join("&");
    }
}


/**
 *	获取查询字符串的参数值（value）
 * @param name  	参数名   string
 * @param queryArr	查询数组 array
 * @returns {null}
 */
function getQuerystringParam (name, queryArr) {
    var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
    var r = queryArr || window.location.search.substr(1).match(reg);
    if (r != null) {
        return unescape(r[2]);
    }
    return null;
}

/**
 *  tab标签及导航切换功能
 *  注：导航类型为不含二级导航
 *
 *  @author Arley   08|12|2016
 *
 * @param selector          ：   标签公用选择器
 * @param checkedSelector   ：   选中状态的选择器
 * @param callback          ：   选中后的回调函数
 */

function switcher (selector, checkedSelector, callback) {
    if (!selector && !checkedSelector) {
        return;
    }
    if (callback && typeof callback != 'function') {
        return;
    }

    var type,
        target = $(selector),
        reg = /\.|\[(.*?)\]/ig,
        b = checkedSelector.match(reg)[0],
        attr = b.replace(/\[|\]/ig, "");
    if ( b.indexOf(".") != -1) {
        type = "class";
        var c = checkedSelector.replace(/\.|\#|\[(.*?)\]/g, "");
    } else if (b.indexOf("[") != -1) {
        type = "attr";
        var attrName = attr.split("=")[0],
            attrValue = attr.split("=")[1].replace(/\"|\'/ig, "");
    } else {
        alert("The parameters of checkedSelector if no defined.");
    }

    target.each(function (i, obj) {
        var s = $(this);
        s.off("click").on("click", function (e) {
            var e = e || window.event;
            if (type == "class") {
                s.siblings(selector).removeClass(c).end().addClass(c);
                callback && callback(e);
            } else if (type = "attr") {
                s.siblings(selector).attr(attrName).end().attr(attrName, attrValue);
                callback && callback(e);
            } else {
                alert("The parameters of checkedSelector if no defined.");
                callback && callback(e);
            }
        })
    });
    return true;
}

/**
 *  重构（美化）后的复选框及单选框选中公用逻辑
 *
 * @author Arley   09|12|2016
 *
 * @param type              ：   [radio || checkbox]       string   使用类型
 * @param selector          ：   目标元素选择器              string
 * @param checkedSelector   ：   选中状态的选择器            string
 */

function resetCheckboxAndRadio (type, selector, checkedSelector, callback) {
    if (!type && !selector && !checkedSelector) {
        return;
    } else if (typeof type != 'string' && typeof selector != 'string' &&  typeof checkedSelector != 'string') {
        return;
    }
    if (callback && typeof callback != 'function') {
        return;
    }

    var tp,         //选中状态选择器的类型
        target = $(selector),
        reg = /\.|\[(.*?)\]/ig,
        b = checkedSelector.match(reg)[0],
        attr = b.replace(/\[|\]/ig, "");
    if ( b.indexOf(".") != -1) {
        tp = "class";
        var c = checkedSelector.replace(/\.|\#|\[(.*?)\]/g, "");
    } else if (b.indexOf("[") != -1) {
        tp = "attr";
        var attrName = attr.split("=")[0],
            attrValue = attr.split("=")[1].replace(/\"|\'/ig, "");
    } else {
        alert("The parameters of checkedSelector if no defined.");
    }

    if(type == 'radio') {
        target.each(function (i, obj) {
            $(obj).off('click').on('click', function () {
                var t = $(this);
                if (!t.hasClass("disabled")) {
                    if (tp == 'class') {
                        if (t.hasClass(c)) {
                            t.siblings(selector).removeClass(c).end().removeClass(c).siblings("input[type='radio']").attr('checked', false);
                            callback && callback();
                        } else {
                            t.siblings(selector).removeClass(c).end().addClass(c).siblings("input[type='radio']").attr('checked', true);
                            callback && callback();
                        }

                    } else if (tp == 'attr') {
                        if (!!t.attr(attrName)) {
                            t.siblings(selector).attr(attrName).end().attr(attrName, '').end().siblings("input[type='radio']").attr('checked', false);
                            callback && callback();
                        } else {
                            t.siblings(selector).attr(attrName).end().attr(attrName, attrValue).end().siblings("input[type='radio']").attr('checked', true);
                            callback && callback();
                        }

                    }
                } else {
                    return false;
                }
            })
        })
    } else if (type == 'checkbox') {
        target.each(function (i, obj) {
            $(obj).off('click').on('click', function () {
                var t = $(this);
                if (!t.hasClass("disabled")) {
                    if (tp == 'class') {
                        if (t.hasClass(c)) {
                            t.removeClass(c).siblings("input[type='checkbox']").attr("checked", false);
                            //console.log(t.siblings("input[type='checkbox']:checked").val());
                            //监听是否有全选按钮并处理选中逻辑
                            if (!t.hasClass("check_all")) {
                                checkboxMonitor(t);
                            }
                            callback && callback();
                        } else {
                            t.addClass(c).siblings("input[type='checkbox']").attr('checked', true);
                            //console.log(t.siblings("input[type='checkbox']:checked").val());
                            //监听是否有全选按钮并处理选中逻辑
                            if (!t.hasClass("check_all")) {
                                checkboxMonitor(t);
                            }
                            callback && callback();
                        }
                    } else if (tp == 'attr') {
                        if (!!t.attr(attrName)) {
                            t.attr(attrName, "").siblings("input[type='checkbox']").attr('checked', false);
                            //监听是否有全选按钮并处理选中逻辑
                            if (!t.hasClass("check_all")) {
                                checkboxMonitor(t);
                            }
                            callback && callback();
                        } else {
                            t.attr(attrName, attrValue).siblings("input[type='checkbox']").attr('checked', true);
                            //监听是否有全选按钮并处理选中逻辑
                            if (!t.hasClass("check_all")) {
                                checkboxMonitor(t);
                            }
                            callback && callback();
                        }
                    }
                } else {
                    return false;
                }
            })
        })
    } else {
        return false;
    }
    return true;
}


/**
 * 复选框全选功能
 *  @author Arley   09/03|2017
 *
 * @param selector          ：   全选元素选择器              string
 * @param callback          ：   点击后执行的返回函数         function
 *
 */

function checkAll (selector, callback) {
    var target = $(selector);
    target.on("click", function () {
        var t = $(this);
        if (t.hasClass("checked")) {
            var checkBoxInput = t.parents(".check_all_box").siblings(".form_container").find("input[type='checkbox']");
            checkBoxInput.each(function () {
                var e = $(this);
                e.siblings("label").addClass("checked");
                e.attr('checked', true);
            });
        } else {
            var checkBoxInput = t.parents(".check_all_box").siblings(".form_container").find("input[type='checkbox']");
            checkBoxInput.each(function () {
                var e = $(this);
                e.siblings("label").removeClass("checked");
                e.attr('checked', false);
            });
        }
    })
}


/**
 * 监听checkbox是否全部选中
 *
 * 该方法会在封装后的单复选按钮逻辑中调用。
 * @returns {boolean}
 */

function checkboxMonitor (that) {
    var parent = that.parents(".form_item");
    var checkAll = parent.find(".check_all_box .form_group .check_all").not("input");
    if (checkAll.length == 0) {
        return false;
    } else {
        var labels = parent.find(".form_group label").not(".check_all");
        var isCheckedAll = true;
        labels.each(function () {
            var t = $(this);
            if (!t.hasClass("checked")) {
                isCheckedAll = false;
            }
        });
        if (isCheckedAll) {
            if (!checkAll.hasClass("checked")) {
                checkAll.addClass("checked").siblings("input[type='checkbox']").attr('checked', true);
            }
        } else {
            if (checkAll.hasClass("checked")) {
                checkAll.removeClass("checked").siblings("input[type='checkbox']").attr('checked', false);
            }
        }
    }
}

/**
 * 展开折叠隐藏部分内容
 * @author Arley   31/03|2017
 *
 * @param selector {String}  调用元素选择器
 */
function dropDownIcon (selector) {
    var ele = $(selector),
            downIcon = '<em class="down_icon"></em>';
    var curHeight = ele.height(),
            maxHeight = parseInt(ele.css("max-height"));
    var childrenCount = ele.find(".form_group").length;
    var newHeight = ((childrenCount % 4) > 0) ? (Math.ceil(childrenCount / 4)) * 30 : Math.floor(childrenCount / 4) * 30;
    if (newHeight > maxHeight) {
        if (ele.length != 0 || ele.length != undefined) {
            ele.append(downIcon);
        }
    }
    //展开折叠按钮的点击事件
    ele.off("click").on("click", ".down_icon", function () {
        var t = $(this);
        if (t.hasClass("unfold")) {
            t.animate({"transform" : "rotate(180deg)"}, 1000);
            t.removeClass("unfold");
            ele.animate({'height': curHeight, "max-height": maxHeight}, 500);
        } else {
            t.animate({"transform" : "rotate(-180deg)"});
            t.addClass("unfold");
            ele.animate({'height': newHeight,  "max-height": newHeight}, 500);
        }
    })
}


/**
 *  筛选条件的选中及事件绑定
 *
 * @author Arley   22|12|2016
 * @param eventType         ： 绑定事件类型
 * @param selector          ： 目标元素选择器
 * @param checkedClassName  ： 选中状态类名称（此处必须为class）
 * @param callback          ： 绑定事件的回调函数
 * @returns {boolean}       ： 暂无
 */

function filtrateChoose (eventType, selector, checkedClassName, callback) {
    if (!selector || !checkedClassName) {
        console.log("The parameters of 'selector' or 'checkedSelector' is not defined.")
        return false;
    } else {
        if (typeof selector != "string") {
            console.log("The parameters of 'selector''s type must be a string.");
            return false;
        }
        if (typeof checkedClassName != "string") {
            console.log("The parameters of 'checkedClassName''s type must be a string.");
            return false;
        }
    }
    if (!!callback && typeof callback != 'function') {
        console.log("The parameters of 'callback' is not defined or it's type is not a function.");
    }

    var ele  = $(selector);
    if (ele.length == 0) {
        return false;
    }
    ele.each(function (obj, value) {
        var t = $(value);
        t.off(eventType).on(eventType, function (e) {
            var e = e || window.event;
            var _this = $(this);
            if (!_this.hasClass("disabled")) {
                _this.addClass(checkedClassName).siblings(selector).removeClass(checkedClassName);
                callback && callback(e);
            }
        })
    });
}

/**
 *  封装绑定事件
 *
 * @author Arley   22|12|2016
 * @param type
 * @param selector
 * @param callback
 * @returns {boolean}
 */

function bindEvents (type, selector, callback) {
    if (!type || !selector) {
        console.log("The parameters of 'type' or 'selector' is not defined.")
        return false;
    } else {
        if (typeof type != "string") {
            console.log("The parameters of 'selector''s type must be a string.");
            return false;
        }
        if (typeof selector != "string") {
            console.log("The parameters of 'selector''s type must be a string.");
            return false;
        }
    }
    if (!!callback && typeof callback != 'function') {
        console.log("The parameters of 'callback' is not defined or it's type is not a function.");
    }
    //input.trigger('input propertychange');
    var ele = $(selector);
    ele.off(type).on(type, function (e) {
        var e = e || window.event;
        callback && callback(e);
    });
}

/**
 *  主导航的message查询
 *  @author Arley   12|12|2016
 *  @param selector 选择器
 */

function getMessagesInfo(selector) {
    if (!selector) {
        return;
    } else if (typeof selector != 'string') {
        console.log("The parameters of 'selector''s type must be a string.");
        return;
    }
    var cookieValue = Cookie.get("logininfo");
    var getMessages = function () {
        var newMessage = 0;
        $.post(contextPath+"/api/message/getNotice?query_type=1",function(datas){
            var data = eval(datas);
            if (data.error_code == 0) {
                //if (data.cookie != cookieValue) {
                    //alert("登录失效，请重新登录");
                    //window.location.href = contextPath + "/login/logout";
                //} else {
                    if(data.count > '0'){
                        newMessage = data.count;
                        $(selector).addClass('active');
                        $(".message_count").find("span").text(data.count).end().show();
                        $(".message_tip").show().find(".count").text(data.count);
                        //五秒钟后隐藏页面提示框。
                        var timer = setTimeout(function () {
                            $(".message_tip").hide();
                            clearTimeout(timer);
                        }, 5000);
                        //当前页面处于屏幕最前端视口时不弹出桌面提示
                        if (!WINDOWFOCUS) {
                            messageNotification("快收单", "您有"+ data.count +"条待处理事项", contextPath + "/home", contextPath + "/static/icon/kuaisd_m_logo.png");
                        }
                    }else if(data.count =='0'){
                        $(selector).removeClass('active');
                        $(".message_count ").hide().find("span").text("");
                        $(".message_tip").hide().find(".count").text("");
                    }
                //}
            } else if (data.error_code == 800) {
                alert("登录失效，请重新登录");
                window.location.href = contextPath + "/login/logout";
            } else {
                alert(data.error_msg);
            }
        });
        return newMessage;
    };
    getMessages();
    setInterval(function () {
        var mCount = getMessages();
        getMessages();
        //调用消息提醒功能
        //messageNotification("快收单", "您有"+ mCount +"条待处理事项", contextPath + "/home", contextPath + "/static/icon/kuaisd_m_logo.png");
    }, 300000);
}

/**
 *  桌面消息提醒功能
 *  @author Arley   07|03|2017
 *  @param title          ：消息通知头字符串
 *  @param showDetailInfo ：消息通知主体内容字符串
 *  @param href           ：点击消息通知后的跳转路径字符串
 *  @param icon           ：消息通知图标的URL字符串
 *  @returns {*}
 */
function messageNotification (title, showDetailInfo, href, icon) {
    if (!!title) {
        if (typeof title != 'string') {
            throw new Error("The parameter of 'title''s type must be a string.");
            return;
        }
    } else {
        throw new Error("The parameter of 'title' is not defined.");
    }

    if (!!showDetailInfo) {
        if (typeof showDetailInfo != 'string') {
            throw new Error("The parameter of 'showDetailInfo''s type must be a string.");
            return;
        }
    } else {
        throw new Error("The parameter of 'showDetailInfo' is not defined.");
    }

    if (!!href) {
        if (typeof href != 'string') {
            throw new Error("The parameter of 'href''s type must be a string.");
            return;
        }
    } else {
        throw new Error("The parameter of 'href' is not defined.");
    }

    if (!!icon) {
        if (typeof icon != 'string') {
            throw new Error("The parameter of 'icon''s type must be a string.");
            return;
        }
    } else {
        throw new Error("The parameter of 'icon' is not defined.");
    }

    var NotificationHandler = {
        isNotificationSupported: 'Notification' in window,
        isPermissionGranted: function() {
            return Notification.permission === 'granted';
        },
        requestPermission: function() {
            if (!this.isNotificationSupported) {
                //console.log('the current browser does not support Notification API');
                alert("该浏览器目前不支持消息推送，请更换Chrome浏览器打开");
                return;
            }

            Notification.requestPermission(function(status) {
                //status是授权状态，如果用户允许显示桌面通知，则status为'granted'
                //permission只读属性
                //var permission = Notification.permission;
                //default 用户没有接收或拒绝授权 不能显示通知
                //granted 用户接受授权 允许显示通知
                //denied  用户拒绝授权 不允许显示通知
            });
        },
        showNotification: function() {
            if (!this.isNotificationSupported) {
                //console.log('the current browser does not support Notification API');
                alert("该浏览器目前不支持消息推送，请更换Chrome浏览器打开");
                return;
            }
            if (!this.isPermissionGranted()) {
                //console.log('the current page has not been granted for notification');
                this.requestPermission();
            }

            var n = new Notification(title, {
                tag : 1,
                renotify : true,
                requireInteraction : true,
                icon: icon,
                body: showDetailInfo
            });

            //onshow函数在消息框显示时会被调用
            //可以做一些数据记录及定时操作等
            /*n.onshow = function() {
                //5秒后关闭消息框
                setTimeout(function() {
                    n.close();
                }, 5000);
            };*/

            //消息框被点击时被调用
            //可以打开相关的视图，同时关闭该消息框等操作
            n.onclick = function() {
                window.location.href = href;
                n.close();
            };

            //当有错误发生时会onerror函数会被调用
            //如果没有granted授权，创建Notification对象实例时，也会执行onerror函数
            n.onerror = function() {
                console.log('Notification encounters an error.');
                //do something useful
            };

            //一个消息框关闭时onclose函数会被调用
            /*n.onclose = function() {
                //do something useful
            };*/
        }
    };

    return NotificationHandler.showNotification();
}




/**
 * COOKIE的增删查功能。
 */

var Cookie = {
    set : function (name, value, expiredays, path, callback) {
        var exdate = new Date();
        exdate.setDate(exdate.getDate() + expiredays);
        document.cookie = name + "=" + escape(value) + ((expiredays==null) ? "" : ";expires=" + exdate.toGMTString()) + ";" + ((path==null) ? "" : "path=" + escape(path));
        if (typeof callback == "function") {
            callback && callback();
        }
    },
    del : function (name, callback) {
        var exp = new Date();
        exp.setTime(exp.getTime() - 1);
        var cval = getCookie(name);
        if(cval != null) {
            document.cookie= name + "="+ cval +";expires="+exp.toGMTString();
        }
        if (typeof callback == "function") {
            callback && callback();
        }
    },
    get : function (name, callback) {
        if (document.cookie.length > 0) {
            var arr,
                    reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
            if(arr = document.cookie.match(reg))
                return arr[2];
            else
                return null;
        }
        if (typeof callback == "function") {
            callback && callback();
        }
    }
};



/**
 * 根据筛选条件加载列表页数据列表
 */

function searchBusinessList (firstLetter) {
    var id = $('body').find("form[role='form']").attr('id');
    var time = $("#filtrate_date").val() || '';
    var start_with = firstLetter;
    var cityId = $("select.city_select option:selected").val();
    var riskType = $("select.risk_type_select option:selected").val();
    var status = $("select.order_status_select option:selected").val();//状态筛选
    var alreadyRequest = $("select.req_type_select option:selected").val();//请款类型筛选
    var label_id = $("select#filtrate_tags option:selected").val();//GPS标签筛选

    label_id && $("#"+id).append('<input type="hidden" id="label_id" name="label_id" value="'+ label_id + '" />');
    var gps_type = $("select#gps_type option:selected").val();//GPS类型筛选
    gps_type && $("#"+id).append('<input type="hidden" id="gps_type" name="gps_type" value="'+ gps_type + '" />');
    var city_id = $("select#filtrate_city option:selected").val();//GPS类型筛选
    city_id && $("#"+id).append('<input type="hidden" id="city_id" name="city_id" value="'+ city_id + '" />');
    (start_with == "全部") && (start_with = '');
    time && $("#"+id).append('<input type="hidden" id="time" name="time" value="'+ time+ '" />');
    start_with && $("#"+id).append('<input type="hidden" id="start_with" name="start_with" value="'+ start_with + '" />');
    cityId && $("#"+id).append('<input type="hidden" id="city_id" name="city_id" value="'+ cityId +'" />');
    status && $("#"+id).append('<input type="hidden" id="status" name="status" value="'+ status +'" />');
    alreadyRequest && $("#"+id).append('<input type="hidden" id="alreadyRequest" name="already_request" value="'+ alreadyRequest +'" />');
    riskType && $("#"+id).append('<input type="hidden" id="riskType" name="risk_type" value="'+ riskType +'" />');
    $("#"+id).submit();
}


/**
 * 分页切换事件
 * @param e  event || window.event
 */
function pageChange (e, firstLetter) {
    var target = $(e.target);
    if (target[0].tagName == "A") {
        target = target.parents(".page_item");
    }
    if (target.hasClass("disabled")) {
        return;
    } else {
        var id = $('body').find("form[role='form']").attr('id');
        var currentPage = $('.page_list .page_item.active').attr('currentPage') || '';
        var limit = $('.page_list .page_item.active').attr('limit') || '';
        var time = $("#filtrate_date").val() || '';
        var start_with = firstLetter;
        var cityId = $("select.city_select option:selected").val();
        var initial = $(".first_letter_conditions .personnel_query.active").text();
        var riskType = $("select.risk_type_select option:selected").val();
        var status = $("select.order_status_select option:selected").val();
        var alreadyRequest = $("select.req_type_select option:selected").val();//请款类型筛选
        var label_id = $("select#filtrate_tags option:selected").val();//GPS标签筛选


        label_id && $("#"+id).append('<input type="hidden" id="label_id" name="label_id" value="'+ label_id + '" />');
        var gps_type = $("select#gps_type option:selected").val();//GPS类型筛选
        gps_type && $("#"+id).append('<input type="hidden" id="gps_type" name="gps_type" value="'+ gps_type + '" />');
        var city_id = $("select#filtrate_city option:selected").val();//GPS类型筛选
        city_id && $("#"+id).append('<input type="hidden" id="city_id" name="city_id" value="'+ city_id + '" />');
        (initial == "全部") && (initial = '');
        initial && $("#"+id).append('<input type="hidden" id="initial" name="initial" value="'+ initial + '" />');
        (start_with == "全部") && (start_with = '');
        time && $("#"+id).append('<input type="hidden" id="time" name="time" value="'+ time+ '" />');
        start_with && $("#"+id).append('<input type="hidden" id="start_with" name="start_with" value="'+ start_with + '" />');
        cityId && $("#"+id).append('<input type="hidden" id="city_id" name="city_id" value="'+ cityId +'" />');
        status && $("#"+id).append('<input type="hidden" id="status" name="status" value="'+ status +'" />');
        alreadyRequest && $("#"+id).append('<input type="hidden" id="alreadyRequest" name="already_request" value="'+ alreadyRequest +'" />');
        limit && $("#"+id).append('<input type="hidden" id="limit" name="limit" value="'+ limit +'" />');
        currentPage && $("#"+id).append('<input type="hidden" id="currentPage" name="currentPage" value="'+ currentPage +'" />');
        riskType && $("#"+id).append('<input type="hidden" id="riskType" name="risk_type" value="'+ riskType +'" />');
        $("#"+id).submit();
    }
}

/**
 * 姓名首字母筛选逻辑
 * @author Arley Joe 2017-8-8 16:31:51
 * @param callback {function} : 回调函数
 */
function firstLetterQuery (callback) {
    var letterBtn = $('.letter_conditions');
    var checkedBox = $('.checked_first_letter .letter_list');
    letterBtn.off('click');   // 必须项，去除人名筛选的默认点击事件
    letterBtn.off('click').on('click', function (e) {
        var e = e || window.event;
        e.stopPropagation();
        e.preventDefault();
        var _this = $(this);
        var _thisLetter = $.trim(_this.text());
        var len = Number(checkedBox.find('.letter_item').length);
        if (_thisLetter == '全部') {
            searchBusinessList();
            return;
        } else {
            if (len > 10) {
                var errorTips = checkedBox.find('.error_msg');
                if (errorTips.is(':hidden')) {
                    errorTips.show();
                    var timer = setTimeout(function () {
                        errorTips.hide();
                        clearTimeout(timer);
                    }, 3000);
                }
                return false;
            } else {
                if (_thisLetter == '#') {
                    checkedBox.find('.letter_item').remove();
                } else {
                    checkedBox.find('.letter_item[data-value="#"]').remove();
                }
                var liElem = '<li class="letter_item" dat-value="'+ _thisLetter +'">' +
                        '            <span class="letter_val">'+ _thisLetter +'</span>' +
                        '            <em class="remove_btn"></em>' +
                        '        </li>';
                checkedBox.append(liElem);
                callback();
            }
        }
    });
    // 已选中首字母的删除功能
    var removeLetter = function () {
        checkedBox.on('click', '.remove_btn', function (e) {
            var e = e || window.event;
            e.stopPropagation();
            e.preventDefault();
            var _this = $(this);
            _this.parents('.letter_item').remove();
            callback();
        })
    };
    removeLetter();
}

/**
 *
 */
function getCheckedFirstLetter () {
    var checkedStr = '';
    var checkedArr = [];
    var elem = $('.letter_item');
    elem.each(function () {
        var _this = $(this);
        var v = $.trim(_this.find('.letter_val').text());
        checkedArr.push(v);
    });
    checkedStr = checkedArr.join('');
    return checkedStr;
}

/**
 * 姓名查询逻辑
 */

function personnelSearch () {
    var id = $('body').find("form[role='form']").attr('id');
    var initial = $(".first_letter_conditions .personnel_query.active").text();
    (initial == "全部") && (initial = '');
    initial && $("#"+id).append('<input type="hidden" id="initial" name="initial" value="'+ initial + '" />');
    $("#"+id).submit();
}

/**
 * 下拉框筛选条件更改的提交事件
 *  @author Arley   10|03|2017
 *
 * 备注：该方法为简单的selector框提交事件
 * Role：selector必须含有“filtrate_select”类，同时要提交的表单ID为：#form_search
 * 注意：请遵循Role引用
 */
function selectorChange () {
    var s = $(".filtrate_select");
    s.off("change").on("change", function () {
        //$("#form_search").submit();
        searchBusinessList();
    })
}

function $alert (text, callback) {
    dialog("alert", {
        closeBtn : false,
        "title" : "提  醒",
        "button" : ["确定",""],
        "content" : text,
        maskClose : false,
        onConfirm : function (d) {
            d.close();
            callback && callback();
        }
    });
}


/**
 * 列表页跳转详情页公用方法
 *
 *
 */
function toOrderDetail () {
    var input = $("#financeId");
    var form = $("#to_order_detail");
    var orderList = $(".business_list .list_item .list_item_detail");
    var url = LOCALURL;
    url && form.append("<input type='hidden' value='"+ url +"' name='url' />");
    orderList.each(function () {
        var currentOrder = $(this);
        currentOrder.off("click").on("click", function () {
            /*var t = $(this);
            var financeId = $.trim(t.parents(".list_item").attr("lang"));
            input.val(financeId);
            form.submit();*/
            window.location = '/customer/detail'
        });
    });
}


/**
 *  图片上传功能
 *  @author Arley   28|03|2017
 *
 *  调用直接注册imgUpload方法即可。
 */
function imgUpload () {
    var parent = $(".img_upload");
    //需要创建的input且type为file
    var inputFile = '<input type="file" class="img_upload_btn" name="file" accept="image/jpeg,image/jpg,image/png" value="上传图片" style="display: none" />';
    var imgCount = 0; //保存已经上传的图片的个数
    parent.each(function () {
        var that = $(this);
        var btn = that.find(".img_upload_layer"); //触发上传图片的元素
        //上传图片按钮的点击事件
        btn.off("click").on("click", function () {
            var fileBtn = that.find(".img_upload_btn");//type为file的input元素组
            var t = $(this);
            if (!t.hasClass("disabled")) {
                t.addClass("disabled");
                fileBtn.eq(imgCount).click();
            }
            fileBtn.eq(imgCount).on("change", function () {
                var targetFile = $(this);
                var success = chooseImage(targetFile);
                //计算图片个数并校验,同时校验通过后创建新的input
                imgCount++;
                if (imgCount >= 5) {
                    t.addClass("disabled");
                } else {
                    t.removeClass("disabled");
                    if (success) {
                        that.append(inputFile);
                    } else {
                        targetFile.remove();
                        that.append(inputFile);
                        imgCount--;
                    }
                }
            });
        });
        //删除按钮的点击事件
        that.on("click", ".remove_btn", function () {
            var t = $(this);
            var thisIndex = t.parents(".img_item").index(); //存储当前图片的索引值
            //console.log(thisIndex);
            t.parents(".img_item").remove();
            that.find(".img_upload_btn").eq(thisIndex).remove();

            //改注释代码为测试删除input是否正确。
            var a = [];
            that.find(".img_upload_btn").each(function () {
                var file = $(this)[0].files[0] && $(this)[0].files[0].name;
                a.push(file);
            });
            console.log(a);
            if (imgCount >= 5) {
                that.append(inputFile);
            }
            imgCount--;
            btn.removeClass("disabled");
        });
    });
}

/**
 * 获取选择的图片并展示图片
 * @author Arley   28|03|2017
 *
 * @param f imgUpload内部调用方法。
 * @returns {boolean}
 */
function chooseImage (f) {
    f.parents(".img_upload").find(".error_msg").hide();
    var file = f[0];
    if (!file.files || !file.files[0]) {
        return;
    }
    var filePath = file.value;
    //获取图片扩展名
    var extname = filePath.substring(filePath.lastIndexOf(".") + 1, filePath.length); //此处使用lastIndexOf屏蔽图片中自带“.”
    if (extname != 'jpg' && extname != 'jpeg' && extname != 'png') {
        //alert('请使用正确格式的图片');
        f.parents(".img_upload").find(".img_error").text("请使用正确格式的图片").show();
        if(f.outerHTML){
            f.outerHTML = f.outerHTML;
        } else{      //FF
            f.value="";

        }
        return false;
    }
    //获取图片大小并校验
    var filseSize = file.files[0].size / 1024 / 1024; //此处单位为“M”
    if (filseSize > 5) {
        //alert('图片大小超过5M');
        f.parents(".img_upload").find(".img_error").text("图片大小超过5M").show();
        return false;
    }
    //获取图片名称
    var fileName = file.files[0].name;
    var fileRender = new FileReader();
    var imgViewBox = $(".img_box");
    fileRender.onload = function (e) {
        var result = e.target.result;
        var imgViewItem =    '<div class="img_item">'
                +     '<img src="'+ result +'" alt="">'
                +     '<span class="img_name nor_wrap">'+ fileName +'</span>'
                +     '<span class="img_size">'+ filseSize.toFixed(2) +'M</span>'
                +     '<div class="remove_mask">'
                +         '<em class="remove_btn"></em>'
                +     '</div>'
                + '</div>'
        imgViewBox.append(imgViewItem);
    };
    fileRender.readAsDataURL(file.files[0]);
    return true;
}

/**
 * 隐藏域表单提交方法（页面跳转）
 * @author Arley   29|03|2017
 *
 * @param opt {Object} 需要传入的跳转参数明细
 * 注意：页面跳转参数需在opt的queryString中配置：
 *     {
 *       action : '',
 *       method : '',
 *       enctype : 'multipart/form-data',
 *       param : {
 *              finance_id : 10056，
 *              pageNum : 9
 *              ……
 *          }
 *          ……
 *       }
 * 备注：在static/js/common/header.js中也有该方法。
 */
function locationTo (opt) {
    var option = {
        action : '',
        method : 'post',
        enctype : 'application/x-www-form-urlencoded', //用于文件上传时间必须配置该项为‘'multipart/form-data'’
        param : {
            finance_id : ''
        }
    };
    var options = $.extend({}, option, opt);
    var form = document.createElement("form"); //隐藏域form元素
    var formId = form.id = "submitForm" + (new Date().getTime()); //动态创建form元素唯一标识符id
    form.action = options.action;
    form.method = options.method;
    form.enctype = options.enctype;
    form.style.display = 'none';
    document.body.appendChild(form);
    var inputEles = '', //form表单内部input元素
        arr = options.param;
    for (var key in arr) {
        inputEles += '<input type="hidden" name="'+ key +'" value="'+ arr[key] +'" />';
    }
    var thisForm = document.getElementById(formId);
    thisForm.innerHTML = inputEles;
    thisForm.submit();
}


/**
 *  公用的取消按钮点击事件
 *  @author Arley Joe 2017/05/22
 *
 *  @return ：需要在使用的页面调用
 */
function cancleEvent () {
    var btn = $(".cancle");
    btn.off("click").on("click", function () {
        window.history.back();
    });
}

function onClear() {
    //Do something here.
    searchBusinessList();

}

function onConfirm () {
    //Do something here.
    searchBusinessList();
}


/**
 * 需传递订单编号进行的页面跳转方法
 *
 * @param selector {string} 按钮的选择器
 * @param opt {Object} 额外传递的参数
 */
function  pageJump (selector, opt) {
    var options = {};
    if (opt) {
        options = $.extend({}, opt);
    }
    var btn = $(selector);
    btn.off("click").on("click", function () {
        var target = $(this);
        var financeId = $.trim(target.data("id"));
        var workflowId = $.trim(target.data("flow_id"));
        var url = $.trim(target.data("url"));
        financeId && (options.finance_id = financeId);
        workflowId && (options.id = workflowId);
        locationTo({
            action : url,
            param : options
        });
    });
}

/**
 *  文件上传功能
 * @author Arley Joe 2017/07/04
 * @param opt {Object} 参数配置项
 */
function fileUpload (opt) {
    if (opt) {
        if (!typeof opt === 'object') return false;
    }
    var option = {
        maxCount : null,        // {Number} 允许上传最大文件个数
        filesSize : null,       // {Number} 允许上传最大文件大小，单位M
        fileFormat : [],        // {Array}  允许上传文件的格式集合。
        imgFormat : ['png', 'jpg', 'jpeg', 'svg', 'gif', 'bmp', 'raw', 'cdr'],       // 常见图片格式
        wordFormat : ['doc', 'docx', 'dot', 'dotx', 'docm', 'dotm'],     // 所有word文档后缀格式
        excelFormat : ['xls', 'xlsx', 'xlsm']       // 常用excel文档后缀格式。
    };
    var options = $.extend({}, option, opt);
    var parent = $(".file_upload");
    //需要创建的input且type为file
    var inputFile = '<input type="file" class="file_upload_btn" name="file"  value="上传文件" style="display: none" />';
    var fileCount = 0; //保存已经上传的文件的个数
    parent.each(function () {
        var that = $(this);
        var btn = that.find(".file_upload_layer"); //触发上传文件的元素
        //上传文件按钮的点击事件
        btn.off("click").on("click", function () {
            var fileBtn = that.find(".file_upload_btn");//type为file的input元素组
            var t = $(this);
            if (!t.hasClass("disabled")) {
                fileBtn.eq(fileCount).click();
            }
            fileBtn.eq(fileCount).on("change", function () {
                var targetFile = $(this);
                var success = chooseFile(targetFile);
                //计算文件个数并校验,同时校验通过后创建新的input
                fileCount++;
                if (options.maxCount) {
                    if (fileCount >= options.maxCount) {
                        btn.addClass("disabled");
                    } else {
                        btn.removeClass("disabled");
                        if (success) {
                            that.append(inputFile);
                        } else {
                            targetFile.remove();
                            that.append(inputFile);
                            fileCount--;
                        }
                    }
                } else {
                    btn.removeClass("disabled");
                    if (success) {
                        that.append(inputFile);
                    } else {
                        targetFile.remove();
                        that.append(inputFile);
                        fileCount--;
                    }
                }
            });
        });
        //删除按钮的点击事件
        that.on("click", ".remove_btn", function () {
            var t = $(this);
            var thisIndex = t.parents(".file_item").index(); //存储当前文件的索引值
            //console.log(thisIndex);
            t.parents(".file_item").remove();
            that.find(".file_upload_btn").eq(thisIndex).remove();
            var a = [];
            that.find(".file_upload_btn").each(function () {
                var file = $(this)[0].files[0] && $(this)[0].files[0].name;
                a.push(file);
            });
            console.log(a);
            if (options.maxCount) {
                if (fileCount >= options.maxCount) {
                    that.append(inputFile);
                }
            }
            fileCount--;
            btn.removeClass("disabled");
        });
    });
    //获取选择的文件并展示文件
    var chooseFile = function (f) {
        f.parents(".file_upload").find(".error_msg").hide();
        var file = f[0];
        if (!file.files || !file.files[0]) {
            return;
        }
        var filePath = file.value;
        //获取文件扩展名
        var extname = filePath.substring(filePath.lastIndexOf(".") + 1, filePath.length); // 此处使用lastIndexOf屏蔽文件中自带“.”
        if (options.fileFormat.length != 0) {
            //if (extname != 'jpg' && extname != 'jpeg' && extname != 'png') {
            var isNeedFormat = $.inArray(extname, options.fileFormat);
            if ( isNeedFormat == -1) {
                //alert('请使用正确格式的文件');
                f.parents(".file_upload").find(".error_msg").text("请使用正确格式的文件").show();
                if(f.outerHTML){
                    f.outerHTML = f.outerHTML;
                } else{      //FF
                    f.value="";
                }
                return false;
            }
        }
        //获取文件大小并校验
        var filesSize = file.files[0].size / 1024 / 1024; //此处单位为“M”
        if (options.filesSize && filesSize > options.filesSize) {
            //alert('文件大小超过5M');
            f.parents(".file_upload").find(".error_msg").text("文件大小超过"+ options.filesSize +"M").show();
            return false;
        }
        //获取文件名称
        var fileName = file.files[0].name;
        var fileRender = new FileReader();
        var imgViewBox = $(".file_box");
        fileRender.onload = function (e) {
            var result = e.target.result;
            if ($.inArray(extname, options.imgFormat) != -1 ) { // 图片格式的文件
                result = result;    //设置图片的SRC为图片缩略图
            } else if (extname == 'pdf') {
                result = '';
            } else if ($.inArray(extname, options.wordFormat) != -1) {
                result = '';
            } else if ($.inArray(extname, options.excelFormat) != -1) {
                result = '';
            } else {
                result = '';
            }
            var imgViewItem =    '<div class="file_item">'
                    +     '<img src="'+ result +'" alt="">'
                    +     '<span class="file_name nor_wrap">'+ fileName +'</span>'
                    +     '<span class="file_size">'+ filesSize.toFixed(2) +'M</span>'
                    +     '<div class="remove_mask">'
                    +         '<em class="remove_btn"></em>'
                    +     '</div>'
                    + '</div>'
            imgViewBox.append(imgViewItem);
        };
        fileRender.readAsDataURL(file.files[0]);
        return true;
    }
}
/**
 * 加载动画的时间冒泡屏蔽
 * @author Arley Joe 2017-7-12 18:47:29
 * @returns {boolean}
 */
function loading() {
    var elem = $('#loading');
    if (elem.length == 0) {
        return false;
    } else {
        elem.off('click').on('click', function (e) {
            var e = e || window.event;
            e.stopPropagation();
            e.preventDefault();
            return false;
        });
    }
}

/**
 * 时间联动（开始结束）的逻辑封装
 * @author Arley Joe 2017-8-4 11:41:37
 * @param startSelector {string} : 开始时间
 * @param endSelector {string} : 结束时间
 */
function initDateStartEnd (startSelector, endSelector) {
    var start = {
        format: 'YYYY-MM-DD',
        //minDate: '2014-06-16', //设定最小日期为当前日期
        //festival:true,
        maxDate: $.nowDate({DD:0}), //最大日期,
        isClear : false,
        choosefun: function(elem,datas){
            end.minDate = datas; //开始日选好后，重置结束日的最小日期
            endDates();
        },
        okfun:function (elem,datas) {
            // alert(datas)
        }
    };
    var end = {
        format: 'YYYY-MM-DD',
        // minDate: $.nowDate({DD:0}), //设定最小日期为当前日期
        // festival:true,
        maxDate: $.nowDate({DD:0}), //最大日期
        isClear : false,
        choosefun: function(elem,datas){
            start.maxDate = datas; //将结束日的初始值设定为开始日的最大日期
        }
    };
    function endDates() {
        end.trigger = false;
        $(endSelector).jeDate(end);
    }
    $(startSelector + ' , '+ endSelector).addClass('datainp wicon');
    $(startSelector).jeDate(start);
    $(endSelector).jeDate(end);
}

/**
 * 最小时间当前时间
 * @author Arley Joe 2017-8-9 14:33:32
 * @param target {string} 目标触发元素
 */
function initDateMinToday (target) {
    $(target).jeDate({
        isinitVal : true,
        festival : false,
        ishmsVal : false,
        minDate :  $.nowDate({DD:0}),
        format : "YYYY-MM-DD",
        zIndex : 3000,
        isClear : false
    })
    $(target).addClass('datainp wicon');
}

/**
 * 最大时间当前时间
 * @author Arley Joe 2017-8-9 14:50:11
 * @param target {string} 目标触发元素
 */
function initDateMinTodayForOrder (target) {
    var onClear, onConfirm, onChoosefun;
    onClear = onConfirm = onChoosefun = function () {
        var checkedLetter = getCheckedFirstLetter();
        searchBusinessList(checkedLetter);
    };

    $(target).jeDate({
        isinitVal : false,
        festival : false,
        ishmsVal : false,
        maxDate :  $.nowDate({DD:0}),
        format : "YYYY-MM-DD",
        zIndex : 3000,
        isClear : true,
        clearfun : onClear,
        onfun : onConfirm,
        choosefun : onChoosefun
    });
    $(target).addClass('datainp wicon');
}



$(function () {
    //windowInFocus();
    //getMessagesInfo('#header_messages');
    switcher(".nav_item", ".active");
    filtrateChoose("click", ".category_item", "active", function () {});
    /*filtrateChoose("click", ".conditions_item", "active" , function () {
        searchBusinessList();
    });*/
    // 姓名字母查询
    firstLetterQuery(function () {
        var checkedLetter = getCheckedFirstLetter();
        searchBusinessList(checkedLetter);
    });
    /*// 姓名全部查询
    filtrateChoose("click", ".first_letter_conditions .choose_all", "active", function (e) {
        searchBusinessList();
    });*/
    filtrateChoose("click", ".page_item", "active", function (e) {
        var checkedLetter = getCheckedFirstLetter();
        pageChange(e, checkedLetter);
    });
    filtrateChoose("click", ".first_letter_conditions .personnel_query", "active" , function () {
        personnelSearch();
    });
    loading();
});





















